Skip to main content

第 2 章:建立高可用叢集

高可用(HA)Kubernetes 叢集拓撲的兩個選項

  • 使用堆疊 stacked etcd:其中 etcd 節點與控制平面節點共存
  • 使用外部 external etcd:其中 etcd 在與控制平面不同的節點上運行

在設定 HA 叢集之前,你應該仔細考慮每種拓樸的優缺點

堆疊 Stacked ETCD

020201.svg

堆疊(Stacked)HA 叢集是一種這樣的拓撲, 其中 etcd 分散式資料儲存叢集堆疊在 kubeadm 管理的控制平面節點上,作為控制平面的一個元件運作。

每個控制平面節點執行 kube-apiserver、kube-scheduler 和 kube-controller-manager 實例。 kube-apiserver 使用負載平衡器暴露給工作節點。

每個控制平面節點建立一個本地 etcd 成員(member),這個 etcd 成員只與該節點的 kube-apiserver 通訊。 這也適用於本地 kube-controller-manager 和 kube-scheduler 實例。

這種拓撲將控制平面和 etcd 成員耦合在同一節點上。 相對使用外部 etcd 集群, 設定起來更簡單,而且更易於副本管理。

然而,堆疊集群存在耦合失敗的風險。 如果一個節點發生故障,則 etcd 成員和控制平面實例都會遺失, 並且冗餘會受到影響。 你可以透過增加更多控制平面節點來降低此風險。

因此,你應該為 HA 叢集運行至少三個堆疊的控制平面節點。

這是 kubeadm 中的預設拓樸。 當使用 kubeadm init 和 kubeadm join --control-plane 時, 在控制平面節點上會自動建立本地 etcd 成員。

外部 external ETCD

020202.svg

具有外部 etcd 的 HA 叢集是一種這樣的拓撲, 其中 etcd 分散式資料儲存叢集在獨立於控制平面節點的其他節點上運行

就像堆疊的 etcd 拓樸一樣,外部 etcd 拓樸中的每個控制平面節點都會執行 kube-apiserver、kube-scheduler 和 kube-controller-manager 實例

同樣,kube-apiserver 使用負載平衡器暴露給工作節點。 但是 etcd 成員在不同的主機上運行, 每個 etcd 主機與每個控制平面節點的 kube-apiserver 通訊

這種拓樸結構解耦了控制平面和 etcd 成員。 因此它提供了一種 HA 設置, 其中失去控制平面實例或 etcd 成員的影響較小,並且不會像堆疊的 HA 拓撲那樣影響叢集冗餘

但此拓撲需要兩倍於堆疊 HA 拓撲的主機數量。 具有此拓撲的 HA 叢集至少需要三個用於控制平面節點的主機和三個用於 etcd 節點的主機